package com.cheng.example.book.advise151.chap1;

import javax.script.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

/**
 * 建议16：易变业务使用脚本语言编写
 *
 * 修改Js代码，JVM没有重启，输入参数也没有任何改变，仅仅改变脚本函数即可产生不同的效果。
 * 这就是脚本语言对系统设计最有利的地方：可以随时发布而不用部署；
 * 这也是我们javaer最喜爱它的地方----即使进行变更，也能提供不间断的业务服务。
 */
public class Client16 {
    public static void main(String[] args) throws FileNotFoundException,
            ScriptException, NoSuchMethodException {
        // 获得一个JavaScript执行引擎
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        // 建立上下文变量
        Bindings bind = engine.createBindings();
        bind.put("factor", 1);
        // 绑定上下文，作用于是当前引擎范围
        engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);
        Scanner input =new Scanner(System.in);

        while(input.hasNextInt()){
            int first = input.nextInt();
            int second = input.nextInt();
            System.out.println("输入参数是："+first+","+second);
            // 执行Js代码
            engine.eval(new FileReader("C:/model.js"));
            // 是否可调用方法
            if (engine instanceof Invocable) {
                Invocable in = (Invocable) engine;
                // 执行Js中的函数
                Double result = (Double) in.invokeFunction("formula", first, second);
                System.out.println("运算结果是：" + result.intValue());
            }
        }

    }
}